//设计一个高效算法，将顺序表L所有元素逆置，要求算法的空间复杂度为 O(1)。
#include<iostream>
using namespace std;
#define MaxSize 50
#define ElemType int

struct List{
    ElemType data[MaxSize];
    int length;

    int InitList(List &L){
        L.length=0;
        return L.length;
    }

    int Length(List &L){
        return L.length;
    }

    bool ListInsert(List &L,int i,ElemType e){
        if(i<1||i>L.length+1){   //判断i的范围是否有效
            return false;
        }
        if(L.length>=MaxSize){   //当前存储空间已满，不能插入
            return false;
        }
        for (int j = L.length; j >= i; j--){ //将第i个元素及之后的元素后移
            L.data[j]=L.data[j-1];
        }
        L.data[i-1]=e;           //在第i个位置放入e
        L.length++;              //线性表长度加1
        return true;
        
    }
};


bool reverseList(List &l){
    ElemType tmp;
    //设顺序表n个元素，第1个元素和第n个元素交换位置，第2个元素和n-1个元素交换，以此类推
    for (int i = 0; i < (l.length-1)/2; i++){
        tmp = l.data[i];
        l.data[i]=l.data[l.length-1-i];
        l.data[l.length-1-i]=tmp;
    }
    return true;
}

int main(){
    List l;
    l.InitList(l);
    l.ListInsert(l,1,0);
    l.ListInsert(l,1,1);
    l.ListInsert(l,1,2);
    l.ListInsert(l,1,3);
    l.ListInsert(l,1,4);
    l.ListInsert(l,1,5);
    cout<<l.data[0]<<","<<l.data[1]<<","<<l.data[2]<<","<<l.data[3]<<","<<l.data[4]<<","<<l.data[5]<<endl;
    cout<<reverseList(l)<<endl;
    cout<<l.data[0]<<","<<l.data[1]<<","<<l.data[2]<<","<<l.data[3]<<","<<l.data[4]<<","<<l.data[5]<<endl;
    return 0;
}